{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch, os\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torchvision.datasets as datasets\n",
    "import torch.utils.data as data\n",
    "import torchvision.transforms as transforms\n",
    "import torchvision.models as models\n",
    "from train_model import train_model\n",
    "from test_model import test_model\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_dir = 'tiny-224/'\n",
    "num_workers = {'train' : 100,'val'   : 0,'test'  : 0}\n",
    "data_transforms = {\n",
    "    'train': transforms.Compose([\n",
    "        transforms.RandomRotation(20),\n",
    "        transforms.RandomHorizontalFlip(0.5),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]),\n",
    "    ]),\n",
    "    'val': transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]),\n",
    "    ]),\n",
    "    'test': transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]),\n",
    "    ])\n",
    "}\n",
    "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) \n",
    "                  for x in ['train', 'val','test']}\n",
    "dataloaders = {x: data.DataLoader(image_datasets[x], batch_size=100, shuffle=True, num_workers=num_workers[x])\n",
    "                  for x in ['train', 'val', 'test']}\n",
    "dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val', 'test']}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloading: \"https://download.pytorch.org/models/resnet18-5c106cde.pth\" to /home/ubuntu/.torch/models/resnet18-5c106cde.pth\n",
      "100.0%\n"
     ]
    }
   ],
   "source": [
    "#Load Resnet18\n",
    "model_ft = models.resnet18(True)\n",
    "#Finetune Final few layers to adjust for tiny imagenet input\n",
    "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n",
    "model_ft.fc.out_features = 200\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "model_ft = model_ft.to(device)\n",
    "\n",
    "#Loss Function\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "# Observe that all parameters are being optimized\n",
    "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAE1CAYAAAD6akEFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd81eXd//HXJ5vskAkECCOEsEfEgThw4cKtVG2LrdpaW+8ue2vbX23tttZab7X3rVardjhwVC2OOnDVwVD2hgAhJCQBQkJ2zvX743sIISQQIJyTnLyfj8dpzvl+r/P9fhJqrnzOdV2fy5xziIiIiIiIyNELC3YAIiIiIiIioUIJloiIiIiISBdRgiUiIiIiItJFlGCJiIiIiIh0ESVYIiIiIiIiXUQJloiIiIiISBdRgiXSSWZWaGZnHoPrzjOz67v6uiIiIiISeEqwREREREREuogSLBERERE5LObR35Ei7dB/GCJHwMyizexeMyv2P+41s+hW539gZtv85643M2dmwztx3TAz+7GZbTKz7Wb2hJkl+c/FmNlfzazCzHaZ2Xwzy/Sfm21mG8ysysw2mtk1x+67FxGR7sLMbjOz9f7f/yvM7JJW524ws5Wtzk3yHx9oZs+bWZm/T7nff/ynZvbXVu/P8fdfEf7X88zsl2b2IVADDDWz61rdY4OZfa1NfBeZ2edmttsf5wwzu8LMFrZp910z++ex+0mJBI4SLJEj8yPgBGACMB6YAvwYwMxmAN8FzgSGA6cdxnVn+x+nA0OBeOB+/7kvA0nAQCAV+DpQa2ZxwH3Auc65BOAk4PMj/cZERKRHWQ9Mw+sffgb81cz6mdkVwE+BLwGJwEygwszCgVeATUAOMAB46jDu90XgRiDBf43twAX+e1wH/KFVIjcFeAK4FUgGTgEKgZeAIWaW3+a6TxzWdy7STSnBEjky1wB3Oue2O+fK8Dq1L/rPXQk85pxb7pyrwevgDue69zjnNjjnqoHbgVn+Tw8b8RKr4c65ZufcQufcbv/7fMAYM+vjnNvmnFt+9N+iiIh0d865Z51zxc45n3PuaWAt3od+1wN3OefmO88659wm/7n+wK3OuT3OuTrn3AeHccu/+Pu3Judco3PuX8659f57vAu8gZfwAXwVeNQ5929/fFudc6ucc/XA08C1AGY2Gi/Ze6ULfiQiQacES+TI9Mf75G6vTf5je89taXWu9fMjuW4EkAk8CbwOPOWfeniXmUU65/YAV+GNaG0zs3+Z2cjD+m5ERKRHMrMv+afg7TKzXcAYIA1vtsP6dt4yENjknGs6wlvu16eZ2blm9rGZ7fDf/zz//ffeq70YAB4HrjYzw/uA8hl/4iXS4ynBEjkyxcDgVq8H+Y8BbAOyW50beJTXbQJK/Z8U/sw5NwpvGuAFeFM/cM697pw7C+gHrAIePox7iohID2Rmg/F+338TSHXOJQPLAMNLhIa187YtwKC966ra2APEtnqd1U4b1+r+0cBzwN1Apv/+c/3333uv9mLAOfcx0IA32nU13oeIIiFBCZbIkfkH8GMzSzezNOAnwN6Fwc8A15lZvpnFAv/vMK/7HTMbYmbxwK+Ap51zTWZ2upmN9c+f3403ZdBnZpn+RcRxQD1QjTdlUEREQlscXsJTBmBm1+GNYAE8AnzfzCb7K/4N9ydkn+J9EPgbM4vzF1Ca6n/P58ApZjbIX2Dp9kPcPwqI9t+/yczOBc5udf7PeP3hGf4iTgPazLB4Am+dceNhTlMU6daUYIkcmV8AC4AlwFJgkf8YzrlX8YpOvAOsAz72v6czUx8exfsU7z1gI1AHfMt/LguYg5dcrQTe9bcNwyuqUQzsAE4Fbjqab05ERLo/59wK4PfAR0ApMBb40H/uWeCXwN+BKuBFoK9zrhm4EK8I02agCG+aOc65f+OtjVoCLOQQa6Kcc1XALXgfLO7EG4l6qdX5T/EXvgAq8fqt1rM0nsRLCP+KSAgx59yhW4nIEfNXSVoGRB/FnHcREZGQYmZ98KoQTnLOrQ12PCJdRSNYIseAmV1i3l5ZKcBvgZeVXImIiOznJmC+kisJNe0tcBSRo/c14C9AM96UiG8ENRoREZFuxMwK8YphXBzkUES6nKYIioiIiIiIdBFNERQREREREekiQZsimJaW5nJycoJ1exER6WYWLlxY7pxLD3YcramvEhGRvTrbTwUtwcrJyWHBggXBur2IiHQzZrYp2DG0pb5KRET26mw/1ekpgmYWbmafmdkBeyKY2WwzKzOzz/2P6w8nWBERERERkVBwOCNY/4W3uWliB+efds598+hDEhERERER6Zk6NYJlZtnA+cAjxzYcERERERGRnquzUwTvBX4A+A7S5jIzW2Jmc8xs4NGHJiIi0jlmNsPMVpvZOjO7rZ3zg83sLX8/Nc//waGIiEiXO2SCZWYXANudcwsP0uxlIMc5Nw74N/B4B9e60cwWmNmCsrKyIwpYRESkNTMLBx4AzgVGAV8ws1Ftmt0NPOHvp+4Efh3YKEVEpLfozAjWVGCmf8ftp4DpZvbX1g2ccxXOuXr/y0eAye1dyDn3kHOuwDlXkJ7erSrxiohIzzUFWOec2+Cca8Drqy5q02YU8Lb/+TvtnBcREekSh0ywnHO3O+eynXM5wCzgbefcta3bmFm/Vi9n4hXDEBERCYQBwJZWr4v8x1pbDFzqf34JkGBmqe1dTLMtRETkaHS6THtbZnanmc30v7zFzJab2WLgFmB2VwQnIiLSRb4PnGpmnwGnAluB5vYaaraFiIgcjcPaaNg5Nw+Y53/+k1bHbwdu78rAOquhyUdUxBHniSIi0vNtBVoXV8r2H2vhnCvGP4JlZvHAZc65XQGLUEREgqax2UdEmGFmAbnfYSVY3c05f3iPCQOT+e3l44IdioiIBM98INfMhuAlVrOAq1s3MLM0YIdzzof3geCjAY9SRESOKZ/PsWVnDatLqlhTWsXq0mrWllaxvqyad289nf7JfQISR49OsFLjo1hVWhXsMEREJIicc01m9k3gdSAceNQ5t9zM7gQWOOdeAk4Dfm1mDngPuDloAYuIyFFxzrGtso7VpVWsKaliTWk1a0qrWLu9irrGfbtKZaf0IS8zgdNHZhARFpjRK+jhCVZeVgJPz9+Cz+cIC+APTUREuhfn3FxgbptjraeyzwHmBDouERE5cs45yqsbWFta5SVTpVWsLqlibWk1VfVNLe0yE6MZkZnANccPJi8zgRFZCeRmxBMXHZxUp2cnWJkJ1DQ0s2VnDYNT44IdjoiIiIiIHCbnHCW761i3vXq/x9rt1ezY09DSLjk2krzMBC6ZNIDczAQvmcqMJzk2KojRH6hnJ1hZCQCsKqlSgiUiIiIi0o01NfvYtKOmJYFav72a9WXVrC/bQ3WrEanEmAiGZ8Rz9qhMRmQmeI+seNLjowNWqOJo9OgEa0Sml2CtLqninNFZQY5GRERERERqG5r9idP+I1KFFXtobHYt7TIToxmeEc9lkwYwPCOeYRnxDM/oOYlUR3p0ghUXHcGgvrGsLlGhCxERERGRQHHOsb2qvmUEakNZNRvK9rC+rJqtu2px/jwqzGBwahzD0uM5Iz+T4f4kamh6HIkxkcH9Jo6RHp1ggTdNcFXJ7mCHISIiIiIScmobmtlYvocN5V4CtcGfUG0s339aX5/IcIakxTFxUApXTB7YkkjlpMUSHREexO8g8Hp8gjUyK4G3V22nrrGZmMje9Y8nIiIiInK09haZaJ1ArfePSBVX7huNAhiQ3Ieh6XFcNmkAwzLiGZrmjUZlJcaoqrdfj0+w8rISaPY51m2vZsyApGCHIyIiIiLSbfl8jk07alhStIslRZUsLapkeXElexqaW9rERYUzND2egpwUhqYNZGh6HEPT4xiSFkdsVI9PH465Hv8TGpm1r9CFEiwREREREY9zjqKdtSwpqmTJ1l0sLapk6dZKquq8qX3REWGM7p/IZZOzyc1MYFhaHEPT48lM7NlFJoKtxydYOalxREWEsbpUhS5EREREpHfaO81v76jUkq2VLC3axc6aRgAiw438fonMHN+f8dnJjM1OIjcjnojwsCBHHnp6fIIVER7G8PR4VqmSoIiIiIj0Etur6li2tZLFW7xRqSVFlZRX1wMQHmbkZSZwzugsxmYnMW5AMiOy4ntdsYlg6fEJFnjTBD9cXx7sMEREREREutTeaX7Li3ezvLiSZVsrWV68m+1VXjIVZjA8I57T8tIZl53E2AFJ5PdLVPG3IAqJBCsvK4HnP9vKrpoGkmOjgh2OiIiIiMhh8/kcGyv2tCRRXkK1m8pab5pfeJiRmxHPtNx0RvdPZMyAJEb3TyQuOiT+pA8ZIfGvkecvdLGqpIoThqYGORoRERERkYNrbPaxtrSaZcWVLPcnVCu27abGX80vKiKM/KwEzhvbjzEDEhnTP4m8rASNTPUAIZFgjcxKBLxKgkqwRERERKQ7aWjysaa0isVFu1i21RuVWl1SRUOzD/DKoo/qn8iVBQNbRqWGZ8QTqQIUPVJIJFiZidEk9YlUoQsRERERCapmn2N9WTWLt+xi6dZKFhdVsnLbbhqavGQqOTaSMf2TuO7kHEb3T2JM/0RyUuO0SW8ICYkEy8zIy0pgdcnuYIciIiIiIr2Ec45NFTUs2VrJki3exr3LiitbpvnFR0cwZkAi152Uw9jsJMZnJ5Od0kd7TIW4kEiwwKsk+PyirTjn9H9aEREREelSe/eZWrylkiVFu1pKo+8tQBEdEdYyzW9cdhLjspMYmhavkaleqNMJlpmFAwuArc65C9qciwaeACYDFcBVzrnCLozzkPKyEqiub6JoZy0D+8YG8tYiIiIiEmJqG5pZXLSLhZt28tnmnSwuqqTMXxo9IsybPXXe2H4tydSIzAStmRLg8Eaw/gtYCSS2c+6rwE7n3HAzmwX8FriqC+LrtJH+SoKrS6qUYImIiIjIYdlWWcvCTTtbHiuKd9PkcwAMTY9jWm4a47OTGZetfabk4DqVYJlZNnA+8Evgu+00uQj4qf/5HOB+MzPnnOuKIDtjRKY/wSqt4sxRmYG6rYiIiIj0MI3NPlZu292STC3atJPiyjoAYiLDmDAwma+dOpTJg1OYODCFlDjtsyqd19kRrHuBHwAJHZwfAGwBcM41mVklkAqUt25kZjcCNwIMGjToSOLtUEJMJAOS+6iSoIiIiIjsZ+eeBhZt3jc6tbhoF3WNXlW//kkxTBqcwg2DU5g8OIX8foma6idH5ZAJlpldAGx3zi00s9OO5mbOuYeAhwAKCgq6fHRrpCoJioiIiPRqPn+Z9EWbd7KgcCcLN+9kQ9kewFs7Nbp/Il+YMojJg1OYNCiF/sl9ghyxhJrOjGBNBWaa2XlADJBoZn91zl3bqs1WYCBQZGYRQBJesYuAystK4N01ZTQ0+YiK0CcPIiK9iZnNAP4IhAOPOOd+0+b8IOBxINnf5jbn3NyAByoiXWpPfROLi3axaO90v827Wir7JcdGMnlQCpdNyqZgcArjspPpE6W1U3JsHTLBcs7dDtwO4B/B+n6b5ArgJeDLwEfA5cDbgVx/tVdeVgJNPseG8mpGZrVXi0NEREKRv9LtA8BZQBEw38xecs6taNXsx8Azzrk/mdkoYC6QE/BgReSIOefYuqu2Zd3Uws07WbmtimZ/MYrcjHjOHZPFJP90v6Fpcdq+RwLuiPfBMrM7gQXOuZeAPwNPmtk6YAcwq4viOyx7k6rVJVVKsEREepcpwDrn3AYAM3sKrwBT6wTLsa8SbhJQHNAIReSwNTT5WF5c6R+Z8kaoSnd7pdJjo8KZMDCZb5w2jEmDU5g0MIWk2MggRyxymAmWc24eMM///CetjtcBV3RlYEdiaHockeHGqpIqLgp2MCIiEkgtxZb8ioDj27T5KfCGmX0LiAPObO9Cx7Igk4gcXGVNI59srGDhZm+EanFRJQ1NXjGK7JQ+nDA0tWXt1MisBCJUjEK6oSMeweqOIsPDGJYez2pVEhQRkQN9AfiLc+73ZnYi3syLMc45X+tGx7ogk4jsU9/UzMJNO/lgbTkfritn6dZKfA4iw40xA5L40gmDvYRqcAqZiTHBDlekU0IqwQJvHdaCwp3BDkNERAJrb7GlvbL9x1r7KjADwDn3kZnFAGnA9oBEKCL4fI6VJbv5YG05H6wrZ37hDuoafYSHGRMHJvOt6blMHZ7GuOwkbeQrPVZIJlj//LyY3XWNJMZoHq6ISC8xH8g1syF4idUs4Oo2bTYDZwB/MbN8vMq4ZQGNUqQXKtpZ05JQ/Wd9BTv2NABeQYpZxw1iWm4aU4b0JUF/t0mICLkEa2SWtxfympIqCnL6BjkaEREJBP8m998EXscrwf6oc255m4JM3wMeNrPv4BW8mB2Mircioa6yppGPNpTzvn/aX2FFDQAZCdGcNiKdk3PTmDo8TVP+JGSFXIKV568euEoJlohIr+Lf02pum2OtCzKtwNvbUUS6UEOTjwWbdhywjiouKpwTh6Xy5ZNyOHl4GsMz4lUyXXqFkEuw+ifFkBAdoUIXIiIiIseAc47CihreW1PGe2vK+GhDBTUNzUSEGRMHJXPLGbmcPDyN8QOTiVSVP+mFQi7BMjNGZCUowRIRERHpItX1TfxnXTnvrS3j3TVlbNlRC8Dg1Fgum5TNKSPSOXFYKvHRIfenpchhC8n/CvKyEnhlcTHOOQ1Fi4iIiBwmn8+xYttu3l3jJVSLNu2kyeeIjQrnpGFp3DhtKKeMSGdwalywQxXpdkIywRqZlcDfP2miZHcd/ZL6BDscERERkW6vrKqe99d60/7eX1tOhb/a3+j+idxwylBOyU1n8uAUoiI07U/kYEIywcrL9CoJriqpUoIlIiIi0o6GJh8LN+30pv2tLmPFtt0ApMZFMS03jVNGpDMtN530hOggRyrSs4RkgjXSX0lwdUkVp+dlBDkaERERke5h554G3lm9nbdWbue9NWVU1TcREWZMGpzCrefkcUpuOqP7JxIWpiUWIkcqJBOspNhIshJjVOhCREREejXnHOvL9vDmylLeWlnKwk078TlIi4/mvLH9mJ6fwUnDUrXJr0gXCskEC7xCF6uUYImIiEgv09jsY37hDt5auZ23Vpa2bPSb3y+Rm08fzhn5mYwbkKRRKpFjJGQTrJFZCXy0voLGZp/2YBAREZGQVlnTyLw123lz5Xbmrd5OVV0TURFhnDQsla9OG8r0kRkMSNa6dJFACNkEKy8rgYZmH4Xle8j1F70QERERCRUbyqp5a+V23lxZyoJNO2n2OdLiozh3TBZn5Gdy8vA04rQvlUjAhex/dXlZ+yoJKsESERGRns45x+KiSuYu3cabK0rZUL4H8Gbt3HTqMM7Iz2B8drKm/okEWcgmWMMz4gkPM1aXVHHh+GBHIyIiInJkVpXs5uXFxby8eBubd9QQGW6cMDSV2VNzmD4yg+yU2GCHKCKthGyCFR0RzpC0OBW6EBERkR6nsHyPl1QtKWZNaTXhYcZJw1L51vThnD06i6Q+qvon0l2FbIIF3jTBJUW7gh2GiIiIyCGVVNbxypJiXl5czOKiSgCOy0nh5xeN5tyx/UiL14a/Ij3BIRMsM4sB3gOi/e3nOOfuaNNmNvA7YKv/0P3OuUe6NtTDNzIzgX8t2UZ1fRPxWuQpIiIi3UxFdT2vLivhpcXFzC/cgXMwdkASPzxvJBeM609/Vf4T6XE6k3XUA9Odc9VmFgl8YGavOuc+btPuaefcN7s+xCO3t9DFmtIqJg1KCXI0IiIiIrC7rpE3lpfy8uJiPlhXTrPPMTwjnu+cOYILxvVjaHp8sEMUkaNwyATLOeeAav/LSP/DHcugusrIrEQAVpcowRIREZHgqW1o5u1V23lp8VbeWV1GQ5OP7JQ+3HjKUGaO78/IrATMVP1PJBR0at6cmYUDC4HhwAPOuU/aaXaZmZ0CrAG+45zb0nVhHpnslD7ERoWzWoUuREREJMB8PsfHGyt4YdFWXl1WQnV9E+kJ0Vw9ZRAzJ/Rn4sBkJVUiIahTCZZzrhmYYGbJwAtmNsY5t6xVk5eBfzjn6s3sa8DjwPS21zGzG4EbAQYNGnTUwR9KWJgxIjOBVSW7j/m9RERERADWba/mhc+KePGzYrbuqiU+OoJzx2RxycQBHD80lXDtUyUS0g6r8oNzbpeZvQPMAJa1Ol7RqtkjwF0dvP8h4CGAgoKCgEwzHJmVwOvLS3DO6VMiEREROSZ27Gng5cXFPL+oiMVFlYQZTMtN5wcz8jh7VBZ9osKDHaKIBEhnqgimA43+5KoPcBbw2zZt+jnntvlfzgRWdnmkRygvK4Gn5m+hrKqejMSYYIcjIiIiIaK+qZm3V27nuUVbmbd6O00+R36/RH58fj4zx/fX3x0ivVRnRrD6AY/712GFAc84514xszuBBc65l4BbzGwm0ATsAGYfq4AP195KgqtKqvSLTkQkRJnZDOCPQDjwiHPuN23O/wE43f8yFshwziUHNkoJBc45Fm3eyXOLtvKvJduorG0kIyGar5w8hEsmDiC/X2KwQxSRIOtMFcElwMR2jv+k1fPbgdu7NrSu0bqS4Ckj0oMcjYiIdDX/B4AP4M2wKALmm9lLzrkVe9s4577Tqv23aKdfEzmYzRU1PP9ZES98tpVNFTXERIYxY3QWl07KZurwNK2rEpEWIb/7bt+4KNITolmlSoIiIqFqCrDOObcBwMyeAi4CVnTQ/gvAHQGKTXqwqrpGXlmyjecXFTG/cCdmcOLQVL41PZcZY7KIjw75P6NE5Aj0it8MI7MSWF2qSoIiIiFqANB6a5Ai4Pj2GprZYGAI8HZHFwt0xVvpfgrL9/CX/xQyZ2ER1fVNDM+I5wcz8rh4wgD6J/cJdngi0s31igQrLzOBJz/eRLPPaQhfRKR3mwXM8W8/0q5gVLyV4HPO8dH6Ch79cCNvrdpORJhxwbj+fOnEwUzQflUichh6R4KVlUB9k4/Cij0MS48PdjgiItK1tgIDW73O9h9rzyzg5mMekfQYdY3N/PPzrTz2YSGrSqroGxfFt04fzrUnDFZxLBE5Ir0iwWpd6EIJlohIyJkP5JrZELzEahZwddtGZjYSSAE+Cmx40h2V7q7jyY828bdPNrGzppGRWQncdfk4Zo7vT0yk9qwSCQjn/A+f96DVc+cgKg564Ohxr0iwcjPjCTMvwTpvbL9ghyMiIl3IOddkZt8EXscr0/6oc255m+1EwEu8nnLOadpfL/b5ll089uFG/rVkG83OcWZ+JtdNzeHEoamaBihHzzlo2AO1O6BmB9RUQO1O7/neY417IDLWe0TF+b/GQmQcRPbZ93y/r/5HRNSxjd/XDPVV/sfu9p/XdXB87/PG2n1JU9uEqW0idSgRMZA0EJIHtf+Iy4CwsGP7MzkCvSLBiokMJyc1jtWqJCgiEpKcc3OBuW2O/aTN658GMibpPhqbfby2rITHPtzIos27iI+O4Esn5vDlkwYzODUu2OFJV2puguYGaK6HpgbwNdH+H/mug+NtkwL8X5uhrtJLmFonSwckUBXe/TsSneQlTI210Fhz8LbtCYvYP+kKi/DH69r5SptjdHzO1+wlho17OhGEQXRCq0cixCRBUrb3OrIPWLg38mRh/hGovc/DWh0Pa3Oc/Y8D7CmDXZu9x7bPvZ9va+HR3n07SsDis4KSgPWKBAtgRGYCq0uVYImIiPQWO/c08I/5m3nyo01sq6xjcGosd1w4issnZ5MQExns8MTn8/5g3r3V/yiGyiLvj+qmOi/5aPInS82N0FTf5nlDqzb+dp0ZFekKFg6xfaFPX+9r3yHQZ9L+x2JT9z3v0xf6pEB4mz+9m5u8pKahxku4Gvb4k6+2x2r2vW59zOev19OSxLT5eshz/v+xsAOTprbPY/xfI+OCN2pUXw2VW2DXFti1aV/yVbkFVs/1/r/TWljkvgTswj96/04B0GsSrLysBF5fUUJtQzN9ojS3WkREJFStLa3isf8U8vyiIuoafZw0LJWfXzSG00dmqJpwoLQkT0X+xKlVEtU6oWo7ghMWCXHpEBnjjU5EREF4lPc8JtH/PAoiots8j/S3b/08ykuEwsLbGS3ZO5JiBznXepTFICbZnzj19ZKOrphSGh4B4UneCJAcWnQ8ZOR7j/Y01ByYgFVu8b5GBW60utckWCOzEnAO1m6vYlx2crDDERERkS62vaqO3722mmcXFhEVEcYlEwZw3ck5LcWuejXnvBGPut3eWpm63VBf6Y2W+Jq8kRDna/W82f/c1+r53uPNbdr4X+/Zvm8Uqmpb+8lTYj9IzIYBBZDf3xtdSOwPiQO8R1x6t1xTIz1EVCyk53mPIOo1CVZeVgIAq0qUYImIiISShiYfj324kf95ex31Tc3cMG0IXz91GKnx0cEOrWs11kL1dm8aVN2uNsnSbm+NUNsEqvXrjrd/O0LmrQEKC/e+xqZ6SVL2cZA0YF/StDeBUvIkvUSvSbAGp8YRExmmQhciIiIh5O1Vpfz8lZVsLN/D9JEZ/Pj8fIb2pC1Z9k6lqy5t89i+72tVife1vrLj67SsoUnyr5VJ9JKa9Px9r1u++qekRSd6BQn2Jkl7p9O1PI/YN71uvzZ7n2u6pUh7ek2CFR5m5GYkKMESEREJAeu2V/OLf61g3uoyhqbF8dh1x3F6Xkaww9rHOdhTvv96o6oSqC7ZP3mq3t7+yFJUPMRneFXQMkfDsOn+15ne15jk/ROnqHglPCLdRK9JsMCbJjhvddmhG4qIiEi3tLuukfveXMtf/lNIn8hwfnx+Pl86MYeoiABOPTvSAg4W7k+S/IlS1lgvgdqbNMVnQkKmt7dPdA8ahROR/fSqBGtkVgJzFhZRUV0fevOyRUREQlizz/Hsgi387vXV7Khp4KqCgXzv7DzSE45Rf96wB7Yugu0rDywj3mEBh/771iC1LtzQsgYpzZtaJyIhrVclWHsLXawuqeKk4UqwREREeoL5hTv42cvLWbZ1NwWDU/jLhVMYm92FZa2dgx0boGi+99jyKZQu3zd1LzxqX5I0cMr+idPeYg6xaSrgICJAL02wVpVUcdLwtCBHIyIiIgezrbKWX89dxUuLi8lKjOGPsyYwc3wp7fAYAAAgAElEQVR/7GjXGtVXQ/EiL5EqWuAlVTXl3rmoeBgwGaZ9F7KnQL/xqn4nIoel5yZYPh8sm+Mt8hxxdqfekh4fTd+4KBW6EBER6cbqGpt5+L0NPDhvPc3Occv04Xz9tGHERh3Bny17R6e2fOofodo7OuXzzqfmwohzvGl9A6dA+khN4xORo9JzEywzeP8er8xoJxMsMyMvM4FVpUqwREREuhvnHK8tK+GXc1dStLOWc8dk8cPz8hnYN7bzF2lqgC2feI+9U/5qKrxzUQmQPRmmfd9LpgZMhti+x+abEZFeq2cnWOOuhLd+BjsLISWnU2/Ly0rgmQVb8PkcYWEqZyoiItIdrC6p4qcvLeejDRWMzErg7zccz0nDOjmdv7oM1v0b1rwG696GBv8HqWkjYMS5MPA4b7pfep5Gp0TkmDtkgmVmMcB7QLS//Rzn3B1t2kQDTwCTgQrgKudcYZdH29bYy70Ea+mzcMqtnXrLyKwEahqa2bKzhsGpccc4QBERETmYpmYf//feBu59cw1x0RH8/OIxfOG4gUSEH2TNk3NQusxLqNa87q2jwkFCPxh7GeSeA4NO0OiUiARFZ0aw6oHpzrlqM4sEPjCzV51zH7dq81Vgp3NuuJnNAn4LXHUM4t1f8iAYPBWWPOMN93di0WvrQhdKsERERIJnY/kevvvM53y2eRfnj+3Hzy8eQ9+4qPYbN9bCxvf2JVW7t3rHB0yG03/oraPKGqfNdkUk6A6ZYDnnHFDtfxnpf7g2zS4Cfup/Pge438zM/95ja+wV8Mq3Ydti6D/hkM1HZO4r1X7O6KxjHZ2IiIi04fM5nvx4E79+dSXREeEdVwes3AprX/cSqg3vQlOtV+Vv2OleUjX8LG9jXhGRbqRTa7DMLBxYCAwHHnDOfdKmyQBgC4BzrsnMKoFUoLzNdW4EbgQYNGjQ0UW+1+iL4dUfeNMEO5FgxUVHMKhvrCoJioiIBEHxrlp+MGcJH6wr59QR6dx1+TgyE2O8kz6fVz59zWveo2Spdzx5MEz+sjdKNXgqRGgvSxHpvjqVYDnnmoEJZpYMvGBmY5xzyw73Zs65h4CHAAoKCrpmdKtPCuSeDUvnwFl3dmrxal5WAqtKdnfJ7UVEROTQnHM8v2grP315Oc0+x68uGcsXpgz0Rq12F8MHf4DlL8CeMrBwbw3VWXfCiBlesQpN/RORHuKwqgg653aZ2TvADKB1grUVGAgUmVkEkIRX7CIwxl0Jq17x5mYPO/2QzUdmJfD2qu3UNTYTE6lqQiIiIsdSeXU9P3x+KW+sKGVKTl/uvmI8g1JjoarUS6wWPOrtSzVqJuSdB8Omq0CFiPRYnakimA40+pOrPsBZeEUsWnsJ+DLwEXA58HZA1l/tlXsORCd5xS46kWDlZSXQ7HOs217NmAFJAQhQRESkd3ptWQk/emEpVXVN/PC8kXz15KGE1+6AN34Nnz4MzQ0w4Qtwyg8gZXCwwxUROWqdGcHqBzzuX4cVBjzjnHvFzO4EFjjnXgL+DDxpZuuAHcCsYxZxeyJjvE+9lr8A5/8eog6+IeHIrH2FLpRgiYiIdL3K2kZ+9vJynl+0lTEDEvnHlRMYkdgE7/wCPvlfaNjjzUA59b8hdViwwxUR6TKdqSK4BJjYzvGftHpeB1zRtaEdpnFXwmdPwppXYcxlB22akxpHVEQYq0tV6EJEJBSY2Qzgj0A48Ihz7jfttLkSr+KtAxY7564OaJC9yPtry/jBnCVsr6rnljNy+dbUDCLn/wn+cz/UV8Koi+G02yFjZLBDFRHpcoe1BqtbG3wyJA7wpgkeIsGKCA9jeHo8q1RJUESkx/PPsHgAbwp7ETDfzF5yzq1o1SYXuB2Y6pzbaWYZwYk2tNU0NPGbV1fxxEebGJYex4vXT2Bs8dPwP3+E2p2Qdz6cfjtkjQ12qCIix0zoJFhhYV5i9fGDsKcC4lIP2nxkVgIfri8/aBsREekRpgDrnHMbAMzsKbz9GVe0anMD3jYjOwGcc9sDHmWIW7hpJ9975nMKK2q48cR+3Jr6IZHPXe9VBRx+lrdv1YBJwQ5TROSYCwt2AF1q3FXga4Llzx+yaV5WAqW769lV0xCAwERE5Bhq2YvRr8h/rLURwAgz+9DMPvZPKZQuUN/UzF2vreKK//0PNDXw9ilr+eG6q4l888eQMQq+8gZcO0fJlYj0GqEzggWQNcb7Zb70WZhyw0Gb5vkLXawqqeKEoQcf7RIRkR4vAsgFTgOygffMbKxzblfbhmZ2I3AjwKBBgwIZY49TWL6Hr/91IetKdnLX0GVcWv13wj4tgkEnwqUPw5BpwQ5RRCTgQmsEC7xiF1s+gR0bD9psZFYi4FUSFBGRHm3vXox7ZfuPtVYEvOSca3TObQTW4CVcB3DOPeScK3DOFaSnpx+TgENBSWUdX3z4PxxX+TpLUn/E5cV3EZaQCdc+D9e9quRKRHqt0EuwxvqLGS6dc9BmmYnRJPWJVKELEZGebz6Qa2ZDzCwKb6uQl9q0eRFv9AozS8ObMrghkEGGkl01Dfzo4ef4n7rb+bm7n9iEFPjC03D9WzD8DDALdogiIkETWlMEAZKyvYqCS56GU77f4S95MyMvK4HVJbsDHKCIiHQl51yTmX0TeB2vTPujzrnlbfZrfB0428xWAM3Arc65iuBF3XPV1tXz8oP/zYNVfyUsOg7Of8j7cDMs9D6zFRE5EqGXYIE3TfDlW6D4s4Muqh2ZlcDzi7binMP0aZuISI/lnJsLzG1zrPV+jQ74rv8hR6hx23K2PXYdX2xYTUn2WWR94UGIV8V7EZHWQvPjplEXQXiUV+ziIPKyEqiub6JoZ22AAhMREemBmpvwvXs39tCpJNUX88HE35F1/bNKrkRE2hGaCVafZBhxjrcOq7mpw2Z5mV4lQRW6EBER6UDJMtwj0wl75+e81jSZF096gZMvulHrrEREOhCaCRbA2Cthz3bY+G6HTUb4S7WvLlWCJSIisp/mRnj3LnjoNGrLN3NTw3+xaMof+MrZBcGOTESkWwvNNVgAuWdDTBIsecaraNSOxJhIBiT3USVBEelQY2MjRUVF1NXVBTuUkBETE0N2djaRkZHBDkU6sm0J/PMbULKUwn7ncsnGizhtYj4/Pj9fa5ZFuiH1VV3raPup0E2wImO8tVjLnoeGPRAV124zVRIUkYMpKioiISGBnJwc/WHZBZxzVFRUUFRUxJAhQ4IdjrTV1ADv3w3v/x769GXhCfdzxbt9OTUvnbsuH0dYmP4bEOmO1Fd1na7op0J3iiDAuKugoRpWv9phk7ysBDaU7aGhyRfAwESkp6irqyM1NVUdVhcxM1JTU/Upa3dU/Dk8fDq8+1sYcxmfnvcqX3g/jYmDUnjwmslEhof2nwwiPZn6qq7TFf1UaP+2HHQSJGZ70wQ7MDIrgSafY0N5dQADE5GeRB1W19LPs5tpqoe3fg4PT4c95fCFp1g65Xdc9/Q6hqTF8eiXj6NPVHiwoxSRQ9Dv1q5ztD/L0E6wwsJg7OWw7k2v02hHXpYqCYqISC+1dSH836netMDxs+Dmj9nQdxqzH/uUlLgonvjqFJJitVZORORwhHaCBd6mw67ZW4vVjqFp8USEmQpdiEi3tGvXLh588MHDft95553Hrl27DtrmJz/5CW+++eaRhiY9WWMd/PsOeORMqKuEa+bAxQ9S0tCHL/75UwCe/OrxZCbGBDlQEekJ1FftL/QTrMzRkDkGlrY/TTAqIoxh6fEawRKRbqmjTqupqeM9/gDmzp1LcnLyQdvceeednHnmmUcVn/RAtTu9tVYf3gsTr4WbP4bcs9hV08CXHv2EytpGHv/KFIaktV8cSkSkLfVV+wv9BAtg7BVQNB8q1rd72qskqARLRLqf2267jfXr1zNhwgSOO+44pk2bxsyZMxk1ahQAF198MZMnT2b06NE89NBDLe/LycmhvLycwsJC8vPzueGGGxg9ejRnn302tbW1AMyePZs5c+a0tL/jjjuYNGkSY8eOZdWqVQCUlZVx1llnMXr0aK6//noGDx5MeXn7U66lB3AOXvwGlK+Fq5+Bmf8DMUnUNDTxlb/Mp7C8hoe+NJkxA5KCHamI9CDqq/Z3yDLtZjYQeALIBBzwkHPuj23anAb8E9joP/S8c+7Org31KIy9HN78KSydA6f99wGn87ISeGlxMbvrGkmM0VxzEWnfz15ezorirt3WYVT/RO64cHSH53/zm9+wbNkyPv/8c+bNm8f555/PsmXLWkrHPvroo/Tt25fa2lqOO+44LrvsMlJTU/e7xtq1a/nHP/7Bww8/zJVXXslzzz3Htddee8C90tLSWLRoEQ8++CB33303jzzyCD/72c+YPn06t99+O6+99hp//vOfu/T7lwD76H5YPRdm/BZGnANAY7OPb/xtEZ9v2cWD10zmpGFpQQ5SRI6G+qrg91WdGcFqAr7nnBsFnADcbGaj2mn3vnNugv/RfZIrgKRsyDkZljztfXrXxkh/oYslWyoDHZmIyGGZMmXKfvty3HfffYwfP54TTjiBLVu2sHbt2gPeM2TIECZMmADA5MmTKSwsbPfal1566QFtPvjgA2bNmgXAjBkzSElJ6cLvRgJq8yfeuqv8mXD81wDw+Ry3PruYeavL+NUlY5kxJivIQYpIKOjtfdUhR7Ccc9uAbf7nVWa2EhgArDjGsXWtcVfCS9+C4kUwYPJ+p44fmkpqXBT3vb2WqcO1h4CItO9gn94FSlzcvnUx8+bN48033+Sjjz4iNjaW0047rd19O6Kjo1ueh4eHt0y76KhdeHj4IefNSw+zpwLmXAfJA+Gi+8EM5xw//9cKXvy8mFvPyWPWlEHBjlJEuoD6quA7rDVYZpYDTAQ+aef0iWa22MxeNbPg/8u2lT8TwqPb3RMrPjqCb5+Zy6cbd/Dmyu1BCE5EpH0JCQlUVbW/RrSyspKUlBRiY2NZtWoVH3/8cZfff+rUqTzzjPd784033mDnzp1dfg85xnw+eOFrsKcMrngcYrz1VQ+8s47HPizkqycP4RunDQtykCLSk6mv2l+nEywziweeA77tnGs7sXMRMNg5Nx74H+DFDq5xo5ktMLMFZWVlRxrzkemT7M03X/YcNB+Y7c6aMoih6XH8+tWVNDb7AhubiEgHUlNTmTp1KmPGjOHWW2/d79yMGTNoamoiPz+f2267jRNOOKHL73/HHXfwxhtvMGbMGJ599lmysrJISEjo8vvIMfThH2Ddv2HGr6G/N/3mb59s4u431nDpxAH86Lx8zdwQkaOivmp/5tpZk3RAI7NI4BXgdefcPZ1oXwgUOOc6LN9RUFDgFixYcBihdoGVr8DT18A1z0HugeUe31hewo1PLuTnF4/hiycMDmxsItItrVy5kvz8/GCHETT19fWEh4cTERHBRx99xE033cTnn39+1Ndt7+dqZgudcwVHffEuFJS+qisVfgiPXwCjLobLHwUz1m2v4uw/vMdpeRn83xcnExneOwoKi4Qy9VVd31cdTT/VmSqCBvwZWNlRcmVmWUCpc86Z2RS8kbGKzgQfULlneVMjljzdboJ11qhMpgzpyx/fXMPFE/qToIqCItLLbd68mSuvvBKfz0dUVBQPP/xwsEOSzqougzlfgZQhcOEfwT9K9Yc31xITGc7vLh+n5EpEQkJ366sOmWABU4EvAkvNbG8q+ENgEIBz7n+By4GbzKwJqAVmuc4MjQVaRDSMvsRbh1VfDdHx+502M350Xj4XPfAh//fuBr5/Tl6QAhUR6R5yc3P57LPPgh2GHC5fMzx/PdTtgmvnQEwiACu37eZfS7Zx8+nDSI2PPsRFRER6hu7WV3WmiuAHwEEnZzvn7gfu76qgjqmxV8LCv3j7gIy78oDT4wcmM3N8fx75YAPXnDCIfkl9Ah+jiIjI0XjvbtgwDy68D7LGthz+w7/XkBAdwQ3ThgYvNhGRENf75gYMOhGSBrZbTXCvW8/Jw+eD37+xJoCBiYiIdIEN78K8X8O4q2DSl1oOLy2q5I0VpXx12hCSY6OCGKCISGjrfQlWWBiMvRzWv+3NT2/HwL6xzJ6aw3OLirp8J2wREZFjpqoUnrse0nLh/Hta1l0B3PPv1STHRvKVk4cc5AIiInK0el+CBd6neq4Zlj/fYZObTxtOYkwkv351ZQADExGRI2FmM8xstZmtM7Pb2jk/28zKzOxz/+P6YMR5TPma4bmvQn0VXPnEfuuMF27ayTury7jxlKEkqoCTiMgx1TsTrIx8yBzrVRPsQFJsJN+aPpz315bz7poA79klInKE4uO9P6qLi4u5/PLL221z2mmncajS4/feey81NTUtr8877zx27drVdYF2ITMLBx4AzgVGAV8ws1HtNH3aOTfB/3gkoEEGwrxfQ+H7cME9Xj/Xyh/+vYbUuCi+fGJOcGITEWkl1Puq3plggVfgYutCqFjfYZMvnjiYQX1j+dW/VtLs635FEUVEOtK/f3/mzJlzxO9v22nNnTuX5OTkrgjtWJgCrHPObXDONQBPARcFOabAWveWV9hiwrUw4er9Tn2yoYIP1pVz02nDiIvuTPFgEZHACNW+qvcmWGMvB+ygxS6iI8L5wYw8VpdW8dzCosDFJiLid9ttt/HAAw+0vP7pT3/KL37xC8444wwmTZrE2LFj+ec//3nA+woLCxkzZgwAtbW1zJo1i/z8fC655BJqa2tb2t10000UFBQwevRo7rjjDgDuu+8+iouLOf300zn99NMByMnJobzc2zv+nnvuYcyYMYwZM4Z777235X75+fnccMMNjB49mrPPPnu/+xxjA4AtrV4X+Y+1dZmZLTGzOWY2sKOLmdmNZrbAzBaUlfWAGQy7i+H5G7xRq/N+t98p5xy///caMhKiufaEwUEKUERCnfqq/fXej7IS+8OQad40wdNu228hcGvnj+3HIwM3cvcbq7lgfD9io3rvj0yk13v1NihZ2rXXzBoL5/6mw9NXXXUV3/72t7n55psBeOaZZ3j99de55ZZbSExMpLy8nBNOOIGZM2diHfwe+9Of/kRsbCwrV65kyZIlTJo0qeXcL3/5S/r27UtzczNnnHEGS5Ys4ZZbbuGee+7hnXfeIS0tbb9rLVy4kMcee4xPPvkE5xzHH388p556KikpKaxdu5Z//OMfPPzww1x55ZU899xzXHvttV3wQ+oSLwP/cM7Vm9nXgMeB6e01dM49BDwEUFBQ0L2nLzQ3eZsJN9bBFY9DVOx+pz9cV8GnG3fws5mjiYkMD1KQIhJQ6quC3lf13hEs8PbE2rnRmyrYATPjx+fns72qnkfe3xjA4EREYOLEiWzfvp3i4mIWL15MSkoKWVlZ/PCHP2TcuHGceeaZbN26ldLS0g6v8d5777V0HuPGjWPcuHEt55555hkmTZrExIkTWb58OStWrDhoPB988AGXXHIJcXFxxMfHc+mll/L+++8DMGTIECZMmADA5MmTKSwsPMrvvtO2Aq1HpLL9x1o45yqcc/X+l48AkwMU27H19s9h80dw4R8hfcR+p7zRq9X0T4ph1pQOB+xERI6a+qr99e7hmFEz4V/f80axsgs6bFaQ05cZo7P433fXM2vKQDISYgIYpIh0Gwf59O5YuuKKK5gzZw4lJSVcddVV/O1vf6OsrIyFCxcSGRlJTk4OdXV1h33djRs3cvfddzN//nxSUlKYPXv2EV1nr+jo6Jbn4eHhgZwiOB/INbMheInVLGC/hUhm1s85t83/cibQ80vErnkdPrwXJs+GcVcccHre6jI+27yLX10ylugIjV6J9Brqqw4qEH1V7x7BikmCvHNh2fPQ3HjQpv997kgamnzc++baAAUnIuK56qqreOqpp5gzZw5XXHEFlZWVZGRkEBkZyTvvvMOmTZsO+v5TTjmFv//97wAsW7aMJUuWALB7927i4uJISkqitLSUV199teU9CQkJVFVVHXCtadOm8eKLL1JTU8OePXt44YUXmDZtWhd+t4fPOdcEfBN4HS9xesY5t9zM7jSzmf5mt5jZcjNbDNwCzA5OtF1k1xZ44WvetJ0Zvz3gtHOOe/69hoF9+3BFQXYQAhSR3kZ91T69ewQLvGqCK16E9e/AiLM7bDYkLY5rTxjMkx9v4rqTcsjNTAhgkCLSm40ePZqqqioGDBhAv379uOaaa7jwwgsZO3YsBQUFjBw58qDvv+mmm7juuuvIz88nPz+fyZO92XHjx49n4sSJjBw5koEDBzJ16tSW99x4443MmDGD/v37884777QcnzRpErNnz2bKlCkAXH/99UycODGQ0wHb5ZybC8xtc+wnrZ7fDtwe6LiOiaYGmHOdt/7qisch8sBZFW+sKGXp1kp+d/k4IsN792epIhIY6qv2MeeCs363oKDAHaq2fUA0NcDvR8DwM+Gyg2+LsmNPA6fe9Q5ThvTlz7OPC1CAIhJMK1euJD8//9AN5bC093M1s4XOuY7nawdBt+mrWnv9R/DR/XDFX2D0JQec9vkc5933Pg1NPt74zilEKMESCXnqq7re0fRT+q0bEQWjLoaVr0D9gUOMrfWNi+Ibpw/nrVXb+c/68gAFKCIi4rfqX15yddwN7SZXAHOXbWNVSRX/dWaukisRkSDQb16ACddAU61X8MLnO2jT66bm0D8phl/NXYlPmw+LiEig7CyEF2+CfhPgnF+226TZ57j3zbXkZsRzwbj+gY1PREQAJViegcfB9B971QTf+BEcZNpkTGQ4t87IY9nW3by0uDiAQYpIsARrKnWo0s/zCL12Ozi8qYER0e02eWnxVtZtr+Y7Z40gPKz9vWZEJDTpd2vXOdqfpRKsvaZ9H46/CT5+ED6456BNLxo/gDEDEvnd66upa2wOUIAiEgwxMTFUVFSo4+oizjkqKiqIidF2F4dlT7lXlr1gNvQd0m6TpmYff3xzLfn9EpkxOiuw8YlIUKmv6jpd0U+piuBeZnDOr6CmAt66E2JTvb1F2hEWZvzw3HyufuQT/vKfQr5+6rDAxioiAZOdnU1RURFlZWXBDiVkxMTEkJ2t0uGHZfkL4Jph7JUdNnl+0VYKK2p4+EsFhGn0SqRXUV/VtY62n1KC1VpYGFz8INTuhFe+A336epsRt+Ok4WlMH5nBA2+v48qCgfSNiwpwsCISCJGRkQwZ0v6IgUjALHkGMkZB1ph2Tzc0+fjjW2sZn53EmfkZAQ5ORIJNfVX3oimCbYVHwpWPw4ACeO6rsPG9Dpvefu5I9jQ0cd9b2nxYRESOkR0boehTGHtFh02eXrCFrbtq+e7ZeZhp9EpEJJiUYLUnKg6ufhr6DoN/XA3Fn7fbLDczgauOG8RfP97ExvI9AQ5SRER6haVzvK9jL2/3dF1jMw+8vY6CwSmckpsWwMBERKQ9h0ywzGygmb1jZivMbLmZ/Vc7bczM7jOzdWa2xMwmHZtwAyi2L3zxeeiTAn+9DMrXtdvsO2flEhURxl2vrQpwgCIiEvKcg6XPwKCTIHlQu03+/slmSnbX8d2zR2j0SkSkG+jMCFYT8D3n3CjgBOBmMxvVps25QK7/cSPwpy6NMlgS+8MXXwAcPHkJ7N52QJOMhBi+dsowXl1WwoLCHYGPUUREQte2xVC+Bsa1Pz2wtqGZB+et58ShqZw0TKNXIiLdwSETLOfcNufcIv/zKmAlMKBNs4uAJ5znYyDZzPp1ebTBkDYcrn0OanfAXy/1CmC0ccMpQ8hIiOaXc1eqPKaIiHSdpc9CWCSMurjd0098VEh5dT3fO3tEYOMSEZEOHdYaLDPLASYCn7Q5NQDY0up1EQcmYZjZjWa2wMwW9Kgykv0nwqy/Q8U6+PtV0FCz3+nYqAi+d/YIPtu8i7lLS4IUpIiIhBRfs7f+Kvcsb9p6G9X1Tfzvu+s5ZUQ6BTkHnhcRkeDodIJlZvHAc8C3nXO7j+RmzrmHnHMFzrmC9PT0I7lE8Aw9FS59GLZ8Cs9+GZob9zt9+eSB5GUmcNfrq2ho8gUpSBERCRmF70N1SYfVA//y4UZ21jTy3bM0eiUi0p10KsEys0i85Opvzrnn22myFRjY6nW2/1hoGX0xXPAHWPsG/PNm8O1LpMLDjNvPG8mmihr++vGmIAYpIiIhYcmzEJUAeececKqytpGH3tvAmfkZTBiYHITgRESkI52pImjAn4GVzrl7Omj2EvAlfzXBE4BK59yBFSFCQcF1MP3HsORpeONHXoUnv1NHpDMtN42731jNf9aXBzFIERHp0RrrYOVLkH8hRPY54PSfP9jI7romvqPRKxGRbqczI1hTgS8C083sc//jPDP7upl93d9mLrABWAc8DHzj2ITbTUz7Phz/dfj4QfhgX85pZvz+ivFkp/Rh9mPzefP/t3fn8XXVdf7HX5+bfd+TNlvbdIO2dKFpgYIsAoKIVJRNXADRjjMyozPOz2WcQX/+ZuY3OupvxsEZrIiCMLIpCiMKiMgmhab7Ct2SNmmbpk2aNM2efH9/nJPkNk3atL25S/p+Ph7ncc4953tvPrk9vd/7yXfbXB/BIEVEJGa9+zvobBl29sCmo108+Pou3j9nArOLsyIQnIiInEj8yQo4514HTriwhvOmzvtcqIKKemZwzf+FtkPw0jchNQ8W3glAYWYyjy+7iDt+8jaffWQV371lHkvnHzffh4iIyMg2PAnpRTDlsuMuLX9tJ0e71HolIhKtTmkWQQkSCMDS/4RpV8H//DVsfmbgUk5aIo9++gIWTsrhC4+v5dG3NCZLRERGqb3JG+s75yYIxB1z6WBrJz99o5oPzi1mRlFGhAIUEZETUYJ1JuIT4ZaHoaQSfnE37Hp14FJGcgIPfWoxV8ws5GtPb+T+V3ZEMFAREYkZm38NvV3Ddg+8/4876Ozp5fNXTY9AYCIiMhpKsM5UYhrc/jjkVsDPb4e9awcuJSfE8cNPLOSD84r5l99u5V+f36qFiEVE5MTWPwl502Hi/GNO16fyeiAAACAASURBVLd08LMVNdy4oJSpBekRCk5ERE5GCVYopObCx38JKdnwyEfg0GBrVUJcgH+7dT4fXVzGD17ewTee2URfn5IsEZFQM7NrzewdM9tuZl85QbmPmJkzs8pwxjcqh/dAzesw9xZvvG+Q5a/upLfP8fkr1XolIhLNlGCFSlYJfOJpwMGD18CaRwbWyYoLGP9843ksu7SCh96s4W+fWkdPrxYjFhEJFTOLA34AvB+YBXzUzGYNUy4D+DzwVngjHKWNT3n782467tLLWw9w2YwCyvNSwxyUiIicCiVYoZQ/He54FrIneQsR/+gKqHkT8KZw/+r7z+GLV8/gl6vr+ItHV9PZ0xvhgEVExo3FwHbn3E7nXBfwGLB0mHL/B/gW0BHO4EZt/ZNQusjrdh7kYGsnOw8eZfGU3AgFJiIio6UEK9SKZsPdL8KHfwStB+An18KTd0JTDWbGX145na9/cBYvbK7n7p9W0dbVE+mIRUTGgxJgT9DjWv/cADM7Hyhzzv3mRC9kZsvMrMrMqhoaGkIf6UjqN8GBTXDeLcddWlXTBEDlZCVYIiLRTgnWWAgEvP7zf1kFl30F3vkd3LcIXvo/0NnKXRdP4V9vmsufdhzk4w+8RXN7d6QjFhEZ18wsAHwP+OLJyjrnljvnKp1zlQUFBWMfXL/1T4DFwewbj7tUVd1IYnyAOSWZ4YtHREROixKssZSYBld81Uu0Zt0Ar30H/mMhrP1vbj6/hP/82PlsqGvmtuUrONjaGeloRURiWR1QFvS41D/XLwOYA/zRzKqBC4Fnomaii74+2PAUTH0vpB+f1K2sbmJ+aTZJ8XHDPFlERKKJEqxwyCqFjzzgdR3MKoFf/Tk88F6uzazhx3csYtfBVm65/032Hm6PdKQiIrFqJTDdzKaYWSJwGzCwArxzrtk5l++cm+ycmwysAG5wzlVFJtwhdr8JLbVe74ch2rt62VjXTOXknAgEJiIip0oJVjiVLYa7fw83Locj9fDgNVy67ks8cWsJDUc6ufn+N9l18GikoxQRiTnOuR7gHuB5YAvwhHNuk5l908xuiGx0o7DhCUhIhZnXHXdp7Z7D9PQ5Fmn8lYhITFCCFW6BAMy71R+f9WV45znm/upqXjr/dehq5eb732TLvpZIRykiEnOcc88552Y456Y65/7JP3evc+6ZYcpeHjWtVz1dsOlXcM4HIOn4BYSrqhsxg/PL1YIlIhILlGBFSmIaXPF3cE8VnHM9hWu+zysp/4sPuj9y2w/fYPXupkhHKCIi4bD9Reg4POzsgQAra5qYWZRBVmpCmAMTEZHToQQr0rLL4KYfw6deID6rmK/3/gePBf6B7zzwMG9sPxjp6EREZKytfwJS82DqFcdd6u1zrK5p0vgrEZEYogQrWpRfAJ9+CW78ITNSjvDfgXtpevgT/OYPf6Svz0U6OhERGQsdLfDu72D2hyHu+BaqrftbaO3s0fgrEZEYogQrmgQCMO824v5qFR0XfZH3Bar4wKtLefefL6Lupf/yKmIRERk/tjwLPR3Dzh4IUFWtBYZFRGKNEqxolJRO8jX3Ev83G1l37t+S0HOEkte+Qte3ptH15DLY9Zq3ZoqIiMS2DU9AzmQoXTTs5ZXVjRRnJVOSnRLeuERE5LQpwYpigcwi5t36D+R/aQ3LZyznqZ5L6Nr0LDx0Pe4/FsAr34bDeyIdpoiInI4j+2HXq3DezWB23GXnHFXVTSxU65WISExRghUDslITWXb7rcz785/wmcJH+ULXX7ChNQte/if4t/Pg4Q/BhqeguyPSoYqIyGht/AW4vhFnD6w73M7+lg4WaYILEZGYctIEy8weNLMDZrZxhOuXm1mzma31t3tDH6YAzC7O4tHPXsHFH/4L7ur7By7t/DdennAXfQe3wS/uhu/OgN98EepWg9PEGCIiUW39EzBxHhTMGPbywPirSWrBEhGJJfGjKPNT4D7g4ROUec05d31IIpITCgSMmyvLeN/sCXzvhXe4e0UhuSnX8p0Lmrns6AvYmkdg5QNQOBsWfAzm3gpp+ZEOW0REgh3cBvvWwvv+acQiK6sbyUiKZ+aEjDAGJiIiZ+qkLVjOuVeBxjDEIqcgKyWB/710Ds/+5SVMKsjgzlfS+MiBu9h8+0r4wPcgPgme/zv47kx47GOw9TfQrsWLRUSiwvonAIM5HxmxSFV1E+dPyiEucPz4LBERiV6jacEajYvMbB2wF/hb59ymEL2unMTs4iye/LOL+OWaOv7vc1u4/kcb+PiFF/DFj3+SrCPbYO2jsO4x2Po/3hNyp0JpJZQshJJKmDDHS8ZERCQ8nPNmD6y4DDInDlukua2bd+qP8MF5w18XEZHoFYoEazUwyTnXambXAb8Cpg9X0MyWAcsAysvLQ/CjBbxugzctLOXqWUV874V3+NmKGn6zfh9ffv853HT1PxK48uuw+09QtwpqV8HOP8L6x70nxyXChPMGE66ShZA3ddgZrUREJARqq6CpGi790ohFVu32Oo5o/SsRkdhzxgmWc64l6Pg5M/tPM8t3zh0cpuxyYDlAZWWlZmEIsf5ug7csKuPeX2/iS0+t57G3d/PNpXOYU3E5VFzuFXQOWur8hKvKmxRjzaPw9nLvenI2lJw/mHCVVmocl4hIqGx4AuKT4dwPjlhkZXUTCXHGvNLsMAYmIiKhcMYJlplNAOqdc87MFuON6zp0xpHJaRvabfCG+17n9gvK+YvLp1GcneK1TmWVetuspd6T+nqhYaufcK3ykq7XvuNNIQyQXT6YcJUshIlzITEtcr+kiEgs6u2Gjb+EGddCcuaIxaqqG5lTkkVKYlwYgxMRkVA4aYJlZj8HLgfyzawW+DqQAOCcux+4CfhzM+sB2oHbnNMc4ZE2XLfBx97ewwfmTuQz76lgTknWkCfEQdFsb1t4h3eu6yjsWzeYdNWuhE2/9K5ZAArOgeIFg1vRHEhIDu8vKiISS3a8DG0HYe7wa18BdPb0sq62mTuXTA5fXCIiEjInTbCccx89yfX78KZxlyjU323w0++p4CdvVPP4yt38eu1eLqzI5TPvqeCKmYUERpqhKjENJi3xtn5H6mHvGn9bDe8+702kARCIh8JZxyZdhbMgPnHsf1ERkViw4QmvG/a0q0cssrGuma6ePhZO0gLDIiKxKFSzCEqUK8tN5d4PzuLzV03n8ZW7+ckb1dz9UBUVBWncfckUPnJ+KckJo+iKklEEM6/1NhgczzWQdK2Bzb+G1Q951+MSvZatkvMHk678mRCnW09EzjKdrd6SGXNvOeEfnlYOLDCsBEtEJBbpW+5ZJislgWWXTuWui6fw3IZ9/Oi1nXzt6Y1894V3+fiFk/jkRZPITz+FaduDx3P1D9h2zpshKzjpWv+EtwAyQHyKN4Zr4nxIL4CENEhMDdqneq1nCSlBx/4+oPEIIhKj3nkOutvgvJG7B4I3/qqiII28U/ksFhGRqKEE6yyVEBdg6fwSbphXzIqdjfz49Z18/6Vt3P/KDj68oIS7L5nC9KKM03txM8id4m1zPuyd6+uDxh3HJl1rHoHuo6f22nFJwydjSRmQVgDpRf5WCBkTvH16kSbkEJHIW/8EZJZC+UUjFunrc1TVNHHNrAlhDExEREJJCdZZzsy4aGoeF03NY0dDKz9+fRe/WFXLYyv3cPnMAj7zngqWTM3DznRdrEAA8qd7W/Dg7p4uL8nqavP+stt11N+3BZ0/2fW2wW6KRxsGZz4Mlpg+mGwFJ2FDj9MK1H1RREKvtQF2/AGW/KX3eTiCHQ2tHG7rpnKyugeKiMQqfZOUAVML0vnnG8/ji1fP4JEVu/nZimo+9sBbzJqYyaffM4Xr5xaTGD/yF4PTEp/obSkh+jLR1wtth6C13t8OHLs/Ug/1m7yZvDqbh3kBg+QsSMr0WsWG3Ya7NuRcYvoJv0SJxBznvD9mdLRA5xF/848zS6B0YaQjjG6bngbXe8LZA2Fw/NUiLTAsIhKzlGDJcfLSk/j8VdP5s8sq+PXaOh54bRd/88Q6vvW7rdyxZDK3Ly4nOzVKZwYMxPmtUYXAeScu293uJ14HghKyemg/fOyXx7ZD3piy/i+Vo+3WmJjuzawYiAOL8/aBeG+K++BzA9dOcC4uEZLSB5O34EQuKcO7lpgRdOyfj0s403f07OUc9PVATyf0dvn7Tq/VNXjf2xV0Lrhs0HMCCd4fEVKyvX1y9uDjxHSvW+1Y/h49HX5i1OLvm4OSpCOD14LPdQ6TSA3XOgww/2NKsE5mwxNQ6C+FcQJV1Y3kpycxKS81TIGJiEioKcGSESUnxHHronJuXljGK9saeOC1nXz7d+/wby9u48pzC/nQghIun1lAUnyMTjyRkAI5k7ztVPT2QNeRIV9Gh34h9be+Hq9VzfV6++DjgX3f8eVcn7fv6fTO9XT5P7MVulq9L8yjEZ8clIj5SVj/RCHO+V+YnXeM/3jYYzfkuM9LChJS/ElI0rx9Yqr3s/rHxgVvJyoTiA96H3q8xVj7egcfD2xDz/U/7h583NPhJc/dbdDd4e17/H13++C57nboaffPBW3B5wjDkn6BeD/hGib5GnjsHydlevEdkywNsx96rq/75HEkpB7fIptWcHzrbHLm8efSCsf+fRoFM7sW+HcgDnjAOfcvQ65/Fvgc0Au0Asucc5vHPLDGnd46gld946RFV9Y0smhyzpl3yxYRkYhRgiUnFQgYV8ws5IqZhWze28ITVXt4dt1efrtxP1kpCVw/dyI3Lihh4aSz5EtBXLz/BTiCYyR6u70ErqvVT+Zag5K+1iHX+o9bB5M+bLAlDbxkyQL++SHH/WUHjv3NucFEpr3WGx/X1T9O7ujIrR2RkpDqJZwJqf4MlUHHKbmDs1YmJHvH8Sle99W4JIhP8loDB44Th+yT/LKJw5xL8lqz2pug47DXQjpw3DTk8WFvHOGhbf65Fk6e5JmX8PQnPsmZkD4B8mccfz4py99nBJ3L8BLvGB97aGZxwA+Aq4FaYKWZPTMkgfpv59z9fvkbgO8B1455cBue8vZzbjphsf3NHexpbOfOJVPGPCQRERk7sV2jStjNKs7kGzfM5msfOJfXtx/k6dV1/GJ1LY++tZuy3BRunF/ChxaUUFGQHulQx7e4BEjN9bZo1N8travNS+76Jyjp37r98/1JWW+X9zv1d6MMxHvd6o55HD/M42HOJSR7yVFC0BafPLbd8E4m3u/iSdmpPa+vFzqaB5OvjmYvCQxOmhLSNN7PsxjY7pzbCWBmjwFLgYEEyznXElQ+jXA0UTrnzR446WLIPvG/f1VNIwCLNMGFiEhMU4IlpyUhLjDQqtXa2cPzG/fzq7V13Pfydr7/h+3MK8vmxvnFXD+v+NTW1ZLxob/7YEIKpOVFOprYFYiL7kQ6upQAe4Ie1wIXDC1kZp8D/gZIBN473AuZ2TJgGUB5efmZRbVvrdciedHnTlq0qrqJlIQ4zp2YeWY/U0REIkp/9pQzlp4Uz0cWlvKzuy/gza9eydeuO5funj6+8exmLvjnl7jrJ2/zzLq9tHf1RjpUETnLOed+4JybCnwZ+PsRyix3zlU65yoLCgrO7Ad2t0PZBTBr6UmLVtU0sqA8m4Q4Vc0iIrFMLVgSUkWZyXzm0go+c2kF7+w/wtNr6vj12jr+6udrSE+K59o5E7hxQQkXVuQRFzgLxmuJSLjUcWwfzFL/3EgeA/5rTCMCmLQE7n7hpMVaO3vYvLeFe947fcxDEhGRsaUES8bMzAkZfOX95/Cla2ayYtchfrWmjt9u2M9Tq2qZkJnM0vnFXDNnAvNLswko2RKRM7MSmG5mU/ASq9uA24MLmNl059w2/+EHgG1EiTW7m+hzGn8lIjIeKMGSMRcIGEum5rNkaj7fXDqHl7Yc4Ok1tfz49V388NWd5KcncvnMQq46t5BLpheQnqTbUkROjXOux8zuAZ7Hm6b9QefcJjP7JlDlnHsGuMfMrgK6gSbgjshFfKyV1U0EDBaUK8ESEYl1+iYrYZWcEMcH5k7kA3Mncriti1febeClLQd4YZPXspUYF+CCilyuPKeQK88toixXi22KyOg4554Dnhty7t6g48+HPahRqqpuZFZxpv7AJCIyDuiTXCImOzWRpfNLWDq/hO7ePlbVNPGHrQf4/ZZ6vvHsZr7x7GZmFKXz3nOKuOrcQhaU52jcloiMO929fazZfZhbF53iNP4iIhKVlGBJVEiIC3BhRR4XVuTxd9edy66DR/nD1gO8tKWeB17byf2v7CAnNYHLZxZy5bmFXDqjgMzkhEiHLSJyxjbvbaG9u5dFkzUdv4jIeKAES6LSlPw07r5kCndfMoWWjm5efbeBP2w5wMvvHODpNXXEB4zFU3J57zmFXHVuEZPz0yIdsojIaVlZ7S0wXKkJLkRExgUlWBL1MpMTuH5uMdfPLaa3z7FmdxMv+a1b//ibLfzjb7YwJT+Ni6flcfHUfC6syCMnLTHSYYuIjEpVdRNluSkUZSZHOhQREQkBJVgSU+ICRuXkXCon5/Lla89hT2Mbf9h6gD++c4CnV9fxyIrdmMGsiZksmZrHkmn5LJ6cS5oGjotIFHLOUVXTyKXTz3BBYxERiRon/dZpZg8C1wMHnHNzhrluwL8D1wFtwJ3OudWhDlRkOGW5qdyxZDJ3LJlMd28f62sP88b2Q/xpx0Ee+lMNP3ptF/EBY35Z9kDCtaA8m6T4uEiHLiJCzaE2DrZ2UanxVyIi48Zo/qz/U+A+4OERrr8fmO5vFwD/5e9FwiohLsDCSbksnJTLX105nfauXlbVNPGnHQd5Y8ch7nt5O9//w3aSEwIsmpzLRVO9LoVzSrI0O6GIRET/+CstMCwiMn6cNMFyzr1qZpNPUGQp8LBzzgErzCzbzCY65/aFKEaR05KSGMcl0/O5ZHo+AC0d3by1s5E/7TjIn7Yf4tu/ewd4h4zkeC6syGPJ1DwunpbP9MJ0vIZZEZGxVVXdRHZqAlML0iMdioiIhEgoBqaUAHuCHtf6545LsMxsGbAMoLy8PAQ/WmT0MpMTuHpWEVfPKgKg4Ugnb+48xJs7DvLG9kO8uLkegJzUBBZOyvFbw3KYW5pFcoK6FIpI6K2saaRyUg4BtaKLiIwbYR3575xbDiwHqKysdOH82SJDFWQkccO8Ym6YVwzAnsY23txxiJXVjaza3cTvtxwAID5gzC7JonJSjp945Wi2LxE5Y4daO9nZcJRbKrXAsIjIeBKKBKsOCK4dSv1zIjGlLDeVstxUblnk3c6NR7tYXdPEqt1NrKpp4pEVNfz49V0AlOakDCRbCyflMLMog/i4QCTDF5EYU1XTBGj8lYjIeBOKBOsZ4B4zewxvcotmjb+S8SA3LZGrZhVxld+lsKunj837WlhV08Sqmkbe3HGIX6/dC0BaYhzzy7NZWJ7Dwsm5LCjPJjM5IZLhi0iUq6puJDE+wJySrEiHIiIiITSaadp/DlwO5JtZLfB1IAHAOXc/8BzeFO3b8aZpv2usghWJpMT4APPLsplfls3dl0zBOUfd4XY/4fK2+17eTp8DM5hRmMG8sizmlmYzrzSbmRMySIxXK5eIeFZWNzG/VMtGiIiMN6OZRfCjJ7nugM+FLCKRGGFmlOakUpqTytL5JQAc7exh7Z7DAwnXi5vreaKqFvAStHMnZjKvtD/pyqKiIF1TxIuchdq7etlY18xnLq2IdCgiIhJiYZ3kQmS8S0uK5+Jp+Vw8zZsa3jlHbVM762oPs762mXV7DvOLVbU8/GaNVz4xjjklWcwry2ZuaRbzSrMpzUnRNPEi49zaPYfp6XMafyUiMg4pwRIZQ2Y2MHnG9XO92Qp7+xw7G1pZu8dLutbXHuanb1TT1dsHeGO/zivJGmjpmluWRWGGZi0UGU+q/AWGF5bnRjgSEREJNSVYImEWFzCmF2UwvSiDm/3pmbt6+ti6v4V1tc2s9xOv17Y10OcvZjAxK5nZxVmcV5LFnJJM5pRkUZiRpJYukRhVVdPEzKIMslI1GY6IyHijBEskCiTGB7zWqtJsuHAS4I3n2rS3hfV+98KNe5t5aWs9zk+68tOTmFOSyXklWcwu9hKvkmx1LxSJdr19jtU1TdwwvzjSoYiIyBhQgiUSpdKS4lk8JZfFUwa7ELV29rBlXwsb65rZWNfCpr3NvLbtIL1+U1d2agJzirOY09/SVZxFeW4qAU2kIRI13tl/hCOdPSyarO6BIiLjkRIskRiSnhTPosm5x3wx6+juZev+I2yoa2ZTndfS9ePXd9Ld6yVdGUnxzCr2uhWeV5LFzAkZTMlPIzlBU0OLREJVjTf+qlITXIiIjEtKsERiXHJC3MD6XP26evp4t/4Im/Z6LV0b6pp5ZEUNnT3eRBoBg/LcVKYVpjOtMINphelML0xnamE66Un6WBAZSyurm5iYlUxJdkqkQxERkTGgb1Ii41BifMDvJpjFrYu8cz29fexoOMq79UfYdqCVHQda2XbgCK+82zDQ2gVQnJXM1MJ0P+kaTL5y0hIj9NuInJyZXQv8OxAHPOCc+5ch1/8G+DTQAzQAn3LO1YQ7TuccK3c1smhKrsZLioiMU0qwRM4S8XEBZk7IYOaEjGPO9/T2sbuxjW0HWtketD329h7au3sHyuWlJfotXl7C1d/yVZSp2QwlsswsDvgBcDVQC6w0s2ecc5uDiq0BKp1zbWb258C3gVvDHWvd4Xb2t3Ro/SsRkXFMCZbIWS4+LkBFQToVBelcM3vwfF+fY29z+2BrV30r2xtaeXbdXlo6egbKpSfFM7UgbaDVa2qBt5+Um0p8XCACv5GchRYD251zOwHM7DFgKTCQYDnnXg4qvwL4eFgj9FVVNwGwcJISLBGR8UoJlogMKxAwSnNSKc1J5YqZhQPnnXM0tHayvb6VHQ1+i1dDK3/afohfrq4bKJcQZ0zOSxtIuPqTr6mFaaQm6qNHQqoE2BP0uBa44ATl7wZ+O9JFM1sGLAMoLy8PRXwDVlY3kp4UzzkTMkP6uiIiEj30LUdETomZUZiRTGFGMkum5R9z7UhHNzsajg50M9zR0Mq79Ud4cUv9wFTyACXZKVQUpB2TeFUUpFGQru6GMrbM7ONAJXDZSGWcc8uB5QCVlZVupHKno6q6ifMn5RCnpRNERMYtJVgiEjIZyQnHzWgI0NnTS82hNnYcGGzx2tFw/DivjKR4KgrSvC6L+WlMKUijIj+dKflppCRqWnkZUR1QFvS41D93DDO7CvgacJlzrjNMsQ1obuvm3QNHuH7uxHD/aBERCSMlWCIy5pLi45hRlMGMomMn2Ogf57Wj4Sg7G1rZdfAoOxuO8tbOQzy95tjvx/2tXhX5fgLmJ2ITM5O1kLKsBKab2RS8xOo24PbgAma2APghcK1z7kD4Q4TVu5twDiq1wLCIyLimBEtEIiZ4nNdlMwqOudbW1TOQcO1sOMrOg63sbDjKU6tqOdo12OqVnBBgSr6XcE3NT6M8L42ynBTKclOZoOTrrOCc6zGze4Dn8aZpf9A5t8nMvglUOeeeAf4VSAee9Luh7nbO3RDOOFdWNxIfsONaeEVEZHxRgiUiUSk1MZ7ZxVnMLs465rxzjoYjnV6rl5907WxoZWNdM7/dsI+goV4kxgUoyUmhNCeF8txUynJTKctJpSzXe5yVkqAxX+OEc+454Lkh5+4NOr4q7EENUVXdxJySLHV3FREZ55RgiUhMMTMKM5MpzEzmoql5x1zr6umj7nA7exrb2NPUxp7GwePnNuyjqa37mPIZSfGU5qZSFpyA+clXaU4qyQn6Iiyh0dnTy9raw9xx0aRIhyIiImNMCZaIjBuJ8QGm5KcxJT9t2OtHOrq9pKupzUu8GtvY09TOroNHeXVbAx3dfceUL8lOGXi9KQOTbqRRkp2iNb7klGysa6arp0/jr0REzgJKsETkrJGRnMCs4gRmFR+/BlH/+l57GtupbWqj5lCbNwbs4FF+tbaOI0GLKyfEGeW5qQNjv/oTME01LyNZ6S8wXKkFhkVExr1RJVhmdi3w73iDhx9wzv3LkOt34g0g7p/26z7n3AMhjFNEZEwFr++1cMiXYOccjUe7BhIub/KN1oGWr66ewZav9KT4Y1q9KgrSKM1JpSgzicKMZBLj1fJ1NqqqbqQiP4289KRIhyIiImPspAmWmcUBPwCuBmqBlWb2jHNu85Cijzvn7hmDGEVEIsrMyEtPIi896bguXr19jr2HvW6G/duOhlZW727i2fV7cUOWqc1LS6QwM5mizCSKMpIpygo6zkymKCuJvLQkLUQ7jvT1OapqmnjfrKJIhyIiImEwmhasxcB259xOADN7DFgKDE2wRETOOnEB8yfHSOXSIVPNd3R7CyzvPdxOfUsH9S2d7G/p4EBLB/VHOti0t4WDrZ3HJWFxAaMgPclLvDL9xCvoeGKWl5hlJMWrO2IM2NHQyuG2bo2/EhE5S4wmwSoB9gQ9rgUuGKbcR8zsUuBd4K+dc3uGKSMictZITohj5oQMZk7IGLFMT28fDa2d1Ld0Uu8nX/v9ZKy+pYOaQ228Xd3I4SEzIAKkJsYxISuZCZn+luVt/UnYhMxk8tLVGhZp/eOvFinBEhE5K4RqkotngZ875zrN7M+Ah4D3Di1kZsuAZQDl5eUh+tEiIrErPi7AxKwUJmalnLBcR3fvQCvYvmavRWx/cyf7W9rZ39zBW7saqW/poKfv2OawuIBRlJFEUVZQEubvi7NTvNawzGQSNCvimKmqaSQ/PZHJeamRDkVERMJgNAlWHVAW9LiUwcksAHDOHQp6+ADw7eFeyDm3HFgOUFlZ6YYrIyIix0tOiGNSXhqT8oafgh68sT4Hj3ZS3+x1Rdzf0sH+5nb2N3utYe/WH+G1bQdp7ew55nkBg8KMZCZme0lX8UDylUKxfy4vLVHdEU9TVXUTlZNy9f6JiJwlRpNgrQSmm9kUvMTqNuD24AJmNtE5J23l/wAACedJREFUt89/eAOwJaRRiojISQUCgzMhnkfWiOVaO3vY39zO3sMd7D3czt5mb7+vuZ0te1v4/eZ6OnuOXRMsMT7AxKxkirNSvEQsK8VLwrKTmVaQTlmuWmeGU9/Swe7GNj6pBYZFRM4aJ02wnHM9ZnYP8DzeNO0POuc2mdk3gSrn3DPAX5nZDUAP0AjcOYYxi4jIGUhPimdaYQbTCocfG+aco6mt20u+Drezr3kwEdt3uJ0VOw5Rf6STXr874k0LS/nOzfPC+SvEjCqNvxIROeuMagyWc+454Lkh5+4NOv4q8NXQhiYiIpFgZuSmJZKblsickuFbwvon59h7uJ30pIQwRxg73jMjnwc+WTns4tYiIjI+hWqSCxEROYuMdnKOs11mcgJXaf0rEZGziqaNEhERERERCRElWCIiIiIiIiGiBEtERERERCRElGCJiIiIiIiEiBIsERERERGREFGCJSIiIiIiEiJKsEREREREREJECZaIiIiIiEiIKMESEREREREJEXPOReYHmzUANRH54WcmHzgY6SBOQ6zGDYo9EmI1bojd2GM1bghd7JOccwUheJ2QidG6SvdSZMRq7LEaN8Ru7LEaN8Ru7GGtpyKWYMUqM6tyzlVGOo5TFatxg2KPhFiNG2I39liNG2I79vEolv89FHv4xWrcELuxx2rcELuxhztudREUEREREREJESVYIiIiIiIiIaIE69Qtj3QApylW4wbFHgmxGjfEbuyxGjfEduzjUSz/eyj28IvVuCF2Y4/VuCF2Yw9r3BqDJSIiIiIiEiJqwRIREREREQkRJVjDMLMyM3vZzDab2SYz+/wwZS43s2YzW+tv90Yi1qHMrNrMNvgxVQ1z3czs+2a23czWm9n5kYhzKDObGfRerjWzFjP7wpAyUfOem9mDZnbAzDYGncs1sxfNbJu/zxnhuXf4ZbaZ2R3hi3rEuP/VzLb698PTZpY9wnNPeG+NtRFi/4aZ1QXdE9eN8Nxrzewd/77/SviiHjHux4NirjaztSM8N9Lv+bCfhbFwr493sVxPQWzWVaqnwidW66pYraf8nx+TdVXU1lPOOW1DNmAicL5/nAG8C8waUuZy4H8iHeswsVcD+Se4fh3wW8CAC4G3Ih3zMDHGAfvx1hqIyvccuBQ4H9gYdO7bwFf8468A3xrmebnATn+f4x/nRDju9wHx/vG3hot7NPdWhGL/BvC3o7ifdgAVQCKwbuj/53DHPeT6d4F7o/Q9H/azMBbu9fG+xXI95ccW03WV6qmIxB71dVWs1lMjxT7kelTWVdFaT6kFaxjOuX3OudX+8RFgC1AS2ahCZinwsPOsALLNbGKkgxriSmCHcy5qF/d0zr0KNA45vRR4yD9+CPjQME+9BnjROdfonGsCXgSuHbNAhxgubufcC865Hv/hCqA0XPGcihHe89FYDGx3zu10znUBj+H9W4XFieI2MwNuAX4ernhOxQk+C6P+Xh/vxnk9BdFfV6meGkOxWlfFaj0FsVtXRWs9pQTrJMxsMrAAeGuYyxeZ2Toz+62ZzQ5rYCNzwAtmtsrMlg1zvQTYE/S4luirlG9j5P/E0fie9ytyzu3zj/cDRcOUifb3/1N4fzUezsnurUi5x+8y8uAIXQCi+T1/D1DvnNs2wvWoec+HfBaOh3t93IjBegpiv65SPRVZsVZXxXI9BTFSV0VTPaUE6wTMLB34BfAF51zLkMur8boGzAP+A/hVuOMbwSXOufOB9wOfM7NLIx3QqTCzROAG4MlhLkfre34c57U9x9QUnWb2NaAHeHSEItF4b/0XMBWYD+zD68IQSz7Kif8iGBXv+Yk+C2PxXh9PYrSegii5t0+H6qnIisG6KtbrKYiBuira6iklWCMwswS8f6hHnXO/HHrdOdfinGv1j58DEswsP8xhHsc5V+fvDwBP4zU7B6sDyoIel/rnosX7gdXOufqhF6L1PQ9S39+Fxd8fGKZMVL7/ZnYncD3wMf+D6DijuLfCzjlX75zrdc71AT8aIaZofc/jgQ8Dj49UJhre8xE+C2P2Xh9PYrWegpivq1RPRUgs1lWxXE9BbNRV0VhPKcEaht/X9MfAFufc90YoM8Evh5ktxnsvD4UvymFjSjOzjP5jvAGhG4cUewb4pHkuBJqDmlCjwYh/JYnG93yIZ4D+GWjuAH49TJnngfeZWY7fTeB9/rmIMbNrgS8BNzjn2kYoM5p7K+yGjMm4keFjWglMN7Mp/l+eb8P7t4q0q4Ctzrna4S5Gw3t+gs/CmLzXx5NYraf8WGK9rlI9FQGxWlfFeD0FUV5XRW095SIw40e0b8AleE2J64G1/nYd8Fngs36Ze4BNeDO9rACWREHcFX486/zYvuafD47bgB/gzVazAaiMdNxB8afhVURZQeei8j3Hq1z3Ad14fXbvBvKAl4BtwO+BXL9sJfBA0HM/BWz3t7uiIO7teH2Q++/1+/2yxcBzJ7q3oiD2n/n38Xq8D9OJQ2P3H1+HN7PQjnDHPlzc/vmf9t/bQWWj7T0f6bMw6u/18b6d4N8mKj8zh8Qes3UVqqciGXvU11UjxB319dRIsfvnf0oU11Un+CyM6L1u/ouLiIiIiIjIGVIXQRERERERkRBRgiUiIiIiIhIiSrBERERERERCRAmWiIiIiIhIiCjBEhERERERCRElWCJRzswuN7P/iXQcIiIiI1FdJTJICZaIiIiIiEiIKMESCREz+7iZvW1ma83sh2YWZ2atZvb/zGyTmb1kZgV+2flmtsLM1pvZ0/4K4pjZNDP7vZmtM7PVZjbVf/l0M3vKzLaa2aP+yuUiIiKnRHWVyNhTgiUSAmZ2LnArcLFzbj7QC3wMSAOqnHOzgVeAr/tPeRj4snNuLt4K7/3nHwV+4JybByzBW1UdYAHwBWAW3qrpF4/5LyUiIuOK6iqR8IiPdAAi48SVwEJgpf8HuxTgANAHPO6XeQT4pZllAdnOuVf88w8BT5pZBlDinHsawDnXAeC/3tvOuVr/8VpgMvD62P9aIiIyjqiuEgkDJVgioWHAQ865rx5z0uwfhpRzp/n6nUHHvej/roiInDrVVSJhoC6CIqHxEnCTmRUCmFmumU3C+z92k1/mduB151wz0GRm7/HPfwJ4xTl3BKg1sw/5r5FkZqlh/S1ERGQ8U10lEgb6y4JICDjnNpvZ3wMvmFkA6AY+BxwFFvvXDuD1fQe4A7jfr5R2Anf55z8B/NDMvum/xs1h/DVERGQcU10lEh7m3Om2AovIyZhZq3MuPdJxiIiIjER1lUhoqYugiIiIiIhIiKgFS0REREREJETUgiUiIiIiIhIiSrBERERERERCRAmWiIiIiIhIiCjBEhERERERCRElWCIiIiIiIiGiBEtERERERCRE/j9LVQiwSh0bDwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 864x576 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Loss: 0.4335 Acc: 0.8892\n",
      "Val Loss: 1.3117 Acc: 0.6778\n",
      "\n",
      "Training complete in 53m 14s\n",
      "Best Validation Accuracy: 0.6854, Epoch: 19\n"
     ]
    }
   ],
   "source": [
    "#Train\n",
    "train_model(\"224\",model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, num_epochs=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# model_ft.load_state_dict(torch.load('./models/model_6_epoch.pt'))\n",
    "# #Test\n",
    "# test_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
